home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / NET.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  5KB  |  146 lines

  1. /*
  2.  * NET        An implementation of the SOCKET network access protocol.
  3.  *        This is the master header file for the Linux NET layer,
  4.  *        or, in plain English: the networking handling part of the
  5.  *        kernel.
  6.  *
  7.  * Version:    @(#)net.h    1.0.3    05/25/93
  8.  *
  9.  * Authors:    Orest Zborowski, <obz@Kodak.COM>
  10.  *        Ross Biro, <bir7@leland.Stanford.Edu>
  11.  *        Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
  12.  *
  13.  *        This program is free software; you can redistribute it and/or
  14.  *        modify it under the terms of the GNU General Public License
  15.  *        as published by the Free Software Foundation; either version
  16.  *        2 of the License, or (at your option) any later version.
  17.  */
  18. #ifndef _LINUX_NET_H
  19. #define _LINUX_NET_H
  20.  
  21. #include <linux/socket.h>
  22.  
  23. struct poll_table_struct;
  24.  
  25. #define NPROTO        32        /* should be enough for now..    */
  26.  
  27.  
  28. #define SYS_SOCKET    1        /* sys_socket(2)        */
  29. #define SYS_BIND    2        /* sys_bind(2)            */
  30. #define SYS_CONNECT    3        /* sys_connect(2)        */
  31. #define SYS_LISTEN    4        /* sys_listen(2)        */
  32. #define SYS_ACCEPT    5        /* sys_accept(2)        */
  33. #define SYS_GETSOCKNAME    6        /* sys_getsockname(2)        */
  34. #define SYS_GETPEERNAME    7        /* sys_getpeername(2)        */
  35. #define SYS_SOCKETPAIR    8        /* sys_socketpair(2)        */
  36. #define SYS_SEND    9        /* sys_send(2)            */
  37. #define SYS_RECV    10        /* sys_recv(2)            */
  38. #define SYS_SENDTO    11        /* sys_sendto(2)        */
  39. #define SYS_RECVFROM    12        /* sys_recvfrom(2)        */
  40. #define SYS_SHUTDOWN    13        /* sys_shutdown(2)        */
  41. #define SYS_SETSOCKOPT    14        /* sys_setsockopt(2)        */
  42. #define SYS_GETSOCKOPT    15        /* sys_getsockopt(2)        */
  43. #define SYS_SENDMSG    16        /* sys_sendmsg(2)        */
  44. #define SYS_RECVMSG    17        /* sys_recvmsg(2)        */
  45.  
  46.  
  47. typedef enum {
  48.   SS_FREE = 0,                /* not allocated        */
  49.   SS_UNCONNECTED,            /* unconnected to any socket    */
  50.   SS_CONNECTING,            /* in process of connecting    */
  51.   SS_CONNECTED,                /* connected to socket        */
  52.   SS_DISCONNECTING            /* in process of disconnecting    */
  53. } socket_state;
  54.  
  55. #define SO_ACCEPTCON    (1<<16)        /* performed a listen        */
  56. #define SO_WAITDATA    (1<<17)        /* wait data to read        */
  57. #define SO_NOSPACE    (1<<18)        /* no space to write        */
  58.  
  59. #ifdef __KERNEL__
  60.  
  61. struct socket
  62. {
  63.     socket_state        state;
  64.  
  65.     unsigned long        flags;
  66.     struct proto_ops    *ops;
  67.     struct inode        *inode;
  68.     struct fasync_struct    *fasync_list;    /* Asynchronous wake up list    */
  69.     struct file        *file;        /* File back pointer for gc    */
  70.     struct sock        *sk;
  71.     struct wait_queue    *wait;
  72.  
  73.     short            type;
  74.     unsigned char        passcred;
  75.     unsigned char        tli;
  76. };
  77.  
  78. #define SOCK_INODE(S)    ((S)->inode)
  79.  
  80. struct scm_cookie;
  81.  
  82. struct proto_ops {
  83.   int    family;
  84.  
  85.   int    (*dup)        (struct socket *newsock, struct socket *oldsock);
  86.   int    (*release)    (struct socket *sock, struct socket *peer);
  87.   int    (*bind)        (struct socket *sock, struct sockaddr *umyaddr,
  88.              int sockaddr_len);
  89.   int    (*connect)    (struct socket *sock, struct sockaddr *uservaddr,
  90.              int sockaddr_len, int flags);
  91.   int    (*socketpair)    (struct socket *sock1, struct socket *sock2);
  92.   int    (*accept)    (struct socket *sock, struct socket *newsock,
  93.              int flags);
  94.   int    (*getname)    (struct socket *sock, struct sockaddr *uaddr,
  95.              int *usockaddr_len, int peer);
  96.   unsigned int (*poll)    (struct file *file, struct socket *sock, struct poll_table_struct *wait);
  97.   int    (*ioctl)    (struct socket *sock, unsigned int cmd,
  98.              unsigned long arg);
  99.   int    (*listen)    (struct socket *sock, int len);
  100.   int    (*shutdown)    (struct socket *sock, int flags);
  101.   int    (*setsockopt)    (struct socket *sock, int level, int optname,
  102.              char *optval, int optlen);
  103.   int    (*getsockopt)    (struct socket *sock, int level, int optname,
  104.              char *optval, int *optlen);
  105.   int    (*fcntl)    (struct socket *sock, unsigned int cmd,
  106.              unsigned long arg);    
  107.   int   (*sendmsg)    (struct socket *sock, struct msghdr *m, int total_len, struct scm_cookie *scm);
  108.   int   (*recvmsg)    (struct socket *sock, struct msghdr *m, int total_len, int flags, struct scm_cookie *scm);
  109. };
  110.  
  111. struct net_proto_family 
  112. {
  113.     int    family;
  114.     int    (*create)(struct socket *sock, int protocol);
  115.     /* These are counters for the number of different methods of
  116.        each we support */
  117.     short    authentication;
  118.     short    encryption;
  119.     short    encrypt_net;
  120. };
  121.  
  122. struct net_proto 
  123. {
  124.     const char *name;        /* Protocol name */
  125.     void (*init_func)(struct net_proto *);    /* Bootstrap */
  126. };
  127.  
  128. extern struct net_proto_family *net_families[];
  129. extern int    sock_wake_async(struct socket *sk, int how);
  130. extern int    sock_register(struct net_proto_family *fam);
  131. extern int    sock_unregister(int family);
  132. extern struct socket *sock_alloc(void);
  133. extern int    sock_create(int family, int type, int proto, struct socket **);
  134. extern void    sock_release(struct socket *);
  135. extern int       sock_sendmsg(struct socket *, struct msghdr *m, int len);
  136. extern int    sock_recvmsg(struct socket *, struct msghdr *m, int len, int flags);
  137. extern int    sock_readv_writev(int type, struct inode * inode, struct file * file,
  138.                   const struct iovec * iov, long count, long size);
  139.  
  140. extern int    net_ratelimit(void);
  141. extern unsigned long net_random(void);
  142. extern void net_srandom(unsigned long);
  143.  
  144. #endif /* __KERNEL__ */
  145. #endif    /* _LINUX_NET_H */
  146.